{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "96d688c7",
   "metadata": {},
   "source": [
    "### 利用墨尔本房价数据 “melb_data.csv”，采用机器学习算法来预测房价。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 102,
   "id": "92e68dd5",
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np \n",
    "import pandas as pd \n",
    "import matplotlib as mpl\n",
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 71,
   "id": "934b753e",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "python 3.8.8 (default, Apr 13 2021, 15:08:03) [MSC v.1916 64 bit (AMD64)]\n",
      "pandas 1.3.0\n",
      "numpy 1.20.3\n",
      "matplotlib 3.3.4\n"
     ]
    }
   ],
   "source": [
    "#查看版本\n",
    "import sys\n",
    "print('python {}'.format(sys.version))\n",
    "print('pandas {}'.format(pd.__version__))\n",
    "print('numpy {}'.format(np.__version__))\n",
    "print('matplotlib {}'.format(mpl.__version__))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 72,
   "id": "7729c5ae",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Suburb</th>\n",
       "      <th>Address</th>\n",
       "      <th>Rooms</th>\n",
       "      <th>Type</th>\n",
       "      <th>Price</th>\n",
       "      <th>Method</th>\n",
       "      <th>SellerG</th>\n",
       "      <th>Date</th>\n",
       "      <th>Distance</th>\n",
       "      <th>Postcode</th>\n",
       "      <th>...</th>\n",
       "      <th>Bathroom</th>\n",
       "      <th>Car</th>\n",
       "      <th>Landsize</th>\n",
       "      <th>BuildingArea</th>\n",
       "      <th>YearBuilt</th>\n",
       "      <th>CouncilArea</th>\n",
       "      <th>Lattitude</th>\n",
       "      <th>Longtitude</th>\n",
       "      <th>Regionname</th>\n",
       "      <th>Propertycount</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>Abbotsford</td>\n",
       "      <td>85 Turner St</td>\n",
       "      <td>2</td>\n",
       "      <td>h</td>\n",
       "      <td>1480000.0</td>\n",
       "      <td>S</td>\n",
       "      <td>Biggin</td>\n",
       "      <td>3/12/2016</td>\n",
       "      <td>2.5</td>\n",
       "      <td>3067.0</td>\n",
       "      <td>...</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>202.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>Yarra</td>\n",
       "      <td>-37.7996</td>\n",
       "      <td>144.9984</td>\n",
       "      <td>Northern Metropolitan</td>\n",
       "      <td>4019.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>Abbotsford</td>\n",
       "      <td>25 Bloomburg St</td>\n",
       "      <td>2</td>\n",
       "      <td>h</td>\n",
       "      <td>1035000.0</td>\n",
       "      <td>S</td>\n",
       "      <td>Biggin</td>\n",
       "      <td>4/02/2016</td>\n",
       "      <td>2.5</td>\n",
       "      <td>3067.0</td>\n",
       "      <td>...</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>156.0</td>\n",
       "      <td>79.0</td>\n",
       "      <td>1900.0</td>\n",
       "      <td>Yarra</td>\n",
       "      <td>-37.8079</td>\n",
       "      <td>144.9934</td>\n",
       "      <td>Northern Metropolitan</td>\n",
       "      <td>4019.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>Abbotsford</td>\n",
       "      <td>5 Charles St</td>\n",
       "      <td>3</td>\n",
       "      <td>h</td>\n",
       "      <td>1465000.0</td>\n",
       "      <td>SP</td>\n",
       "      <td>Biggin</td>\n",
       "      <td>4/03/2017</td>\n",
       "      <td>2.5</td>\n",
       "      <td>3067.0</td>\n",
       "      <td>...</td>\n",
       "      <td>2.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>134.0</td>\n",
       "      <td>150.0</td>\n",
       "      <td>1900.0</td>\n",
       "      <td>Yarra</td>\n",
       "      <td>-37.8093</td>\n",
       "      <td>144.9944</td>\n",
       "      <td>Northern Metropolitan</td>\n",
       "      <td>4019.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>Abbotsford</td>\n",
       "      <td>40 Federation La</td>\n",
       "      <td>3</td>\n",
       "      <td>h</td>\n",
       "      <td>850000.0</td>\n",
       "      <td>PI</td>\n",
       "      <td>Biggin</td>\n",
       "      <td>4/03/2017</td>\n",
       "      <td>2.5</td>\n",
       "      <td>3067.0</td>\n",
       "      <td>...</td>\n",
       "      <td>2.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>94.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>Yarra</td>\n",
       "      <td>-37.7969</td>\n",
       "      <td>144.9969</td>\n",
       "      <td>Northern Metropolitan</td>\n",
       "      <td>4019.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>Abbotsford</td>\n",
       "      <td>55a Park St</td>\n",
       "      <td>4</td>\n",
       "      <td>h</td>\n",
       "      <td>1600000.0</td>\n",
       "      <td>VB</td>\n",
       "      <td>Nelson</td>\n",
       "      <td>4/06/2016</td>\n",
       "      <td>2.5</td>\n",
       "      <td>3067.0</td>\n",
       "      <td>...</td>\n",
       "      <td>1.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>120.0</td>\n",
       "      <td>142.0</td>\n",
       "      <td>2014.0</td>\n",
       "      <td>Yarra</td>\n",
       "      <td>-37.8072</td>\n",
       "      <td>144.9941</td>\n",
       "      <td>Northern Metropolitan</td>\n",
       "      <td>4019.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 21 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "       Suburb           Address  Rooms Type      Price Method SellerG  \\\n",
       "0  Abbotsford      85 Turner St      2    h  1480000.0      S  Biggin   \n",
       "1  Abbotsford   25 Bloomburg St      2    h  1035000.0      S  Biggin   \n",
       "2  Abbotsford      5 Charles St      3    h  1465000.0     SP  Biggin   \n",
       "3  Abbotsford  40 Federation La      3    h   850000.0     PI  Biggin   \n",
       "4  Abbotsford       55a Park St      4    h  1600000.0     VB  Nelson   \n",
       "\n",
       "        Date  Distance  Postcode  ...  Bathroom  Car  Landsize  BuildingArea  \\\n",
       "0  3/12/2016       2.5    3067.0  ...       1.0  1.0     202.0           NaN   \n",
       "1  4/02/2016       2.5    3067.0  ...       1.0  0.0     156.0          79.0   \n",
       "2  4/03/2017       2.5    3067.0  ...       2.0  0.0     134.0         150.0   \n",
       "3  4/03/2017       2.5    3067.0  ...       2.0  1.0      94.0           NaN   \n",
       "4  4/06/2016       2.5    3067.0  ...       1.0  2.0     120.0         142.0   \n",
       "\n",
       "   YearBuilt  CouncilArea Lattitude  Longtitude             Regionname  \\\n",
       "0        NaN        Yarra  -37.7996    144.9984  Northern Metropolitan   \n",
       "1     1900.0        Yarra  -37.8079    144.9934  Northern Metropolitan   \n",
       "2     1900.0        Yarra  -37.8093    144.9944  Northern Metropolitan   \n",
       "3        NaN        Yarra  -37.7969    144.9969  Northern Metropolitan   \n",
       "4     2014.0        Yarra  -37.8072    144.9941  Northern Metropolitan   \n",
       "\n",
       "  Propertycount  \n",
       "0        4019.0  \n",
       "1        4019.0  \n",
       "2        4019.0  \n",
       "3        4019.0  \n",
       "4        4019.0  \n",
       "\n",
       "[5 rows x 21 columns]"
      ]
     },
     "execution_count": 72,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#读取数据，并用head()查看前五行\n",
    "melb_data_full = pd.read_csv('datasets/melb_data.csv')\n",
    "melb_data_full.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 73,
   "id": "22c74c63",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Index(['Suburb', 'Address', 'Rooms', 'Type', 'Price', 'Method', 'SellerG',\n",
       "       'Date', 'Distance', 'Postcode', 'Bedroom2', 'Bathroom', 'Car',\n",
       "       'Landsize', 'BuildingArea', 'YearBuilt', 'CouncilArea', 'Lattitude',\n",
       "       'Longtitude', 'Regionname', 'Propertycount'],\n",
       "      dtype='object')"
      ]
     },
     "execution_count": 73,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "melb_data_full.columns#查看所有的列数新"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 74,
   "id": "5b7f22c0",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Index(['Suburb', 'Address', 'Rooms', 'Type', 'Price', 'Method', 'SellerG',\n",
       "       'Date', 'Distance', 'Postcode', 'Bedroom2', 'Bathroom', 'Landsize',\n",
       "       'Lattitude', 'Longtitude', 'Regionname', 'Propertycount'],\n",
       "      dtype='object')"
      ]
     },
     "execution_count": 74,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data = melb_data_full.dropna(axis=1)\n",
    "data.columns"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 75,
   "id": "25364863",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "              Suburb           Address  Rooms Type Method   SellerG  \\\n",
      "0         Abbotsford      85 Turner St      2    h      S    Biggin   \n",
      "1         Abbotsford   25 Bloomburg St      2    h      S    Biggin   \n",
      "2         Abbotsford      5 Charles St      3    h     SP    Biggin   \n",
      "3         Abbotsford  40 Federation La      3    h     PI    Biggin   \n",
      "4         Abbotsford       55a Park St      4    h     VB    Nelson   \n",
      "...              ...               ...    ...  ...    ...       ...   \n",
      "13575  Wheelers Hill      12 Strada Cr      4    h      S     Barry   \n",
      "13576   Williamstown     77 Merrett Dr      3    h     SP  Williams   \n",
      "13577   Williamstown       83 Power St      3    h      S     Raine   \n",
      "13578   Williamstown      96 Verdon St      4    h     PI   Sweeney   \n",
      "13579     Yarraville        6 Agnes St      4    h     SP   Village   \n",
      "\n",
      "             Date  Distance  Postcode  Bedroom2  Bathroom  Landsize  \\\n",
      "0       3/12/2016       2.5    3067.0       2.0       1.0     202.0   \n",
      "1       4/02/2016       2.5    3067.0       2.0       1.0     156.0   \n",
      "2       4/03/2017       2.5    3067.0       3.0       2.0     134.0   \n",
      "3       4/03/2017       2.5    3067.0       3.0       2.0      94.0   \n",
      "4       4/06/2016       2.5    3067.0       3.0       1.0     120.0   \n",
      "...           ...       ...       ...       ...       ...       ...   \n",
      "13575  26/08/2017      16.7    3150.0       4.0       2.0     652.0   \n",
      "13576  26/08/2017       6.8    3016.0       3.0       2.0     333.0   \n",
      "13577  26/08/2017       6.8    3016.0       3.0       2.0     436.0   \n",
      "13578  26/08/2017       6.8    3016.0       4.0       1.0     866.0   \n",
      "13579  26/08/2017       6.3    3013.0       4.0       1.0     362.0   \n",
      "\n",
      "       Lattitude  Longtitude                  Regionname  Propertycount  \n",
      "0      -37.79960   144.99840       Northern Metropolitan         4019.0  \n",
      "1      -37.80790   144.99340       Northern Metropolitan         4019.0  \n",
      "2      -37.80930   144.99440       Northern Metropolitan         4019.0  \n",
      "3      -37.79690   144.99690       Northern Metropolitan         4019.0  \n",
      "4      -37.80720   144.99410       Northern Metropolitan         4019.0  \n",
      "...          ...         ...                         ...            ...  \n",
      "13575  -37.90562   145.16761  South-Eastern Metropolitan         7392.0  \n",
      "13576  -37.85927   144.87904        Western Metropolitan         6380.0  \n",
      "13577  -37.85274   144.88738        Western Metropolitan         6380.0  \n",
      "13578  -37.85908   144.89299        Western Metropolitan         6380.0  \n",
      "13579  -37.81188   144.88449        Western Metropolitan         6543.0  \n",
      "\n",
      "[13580 rows x 16 columns]\n",
      "Index(['Suburb', 'Address', 'Rooms', 'Type', 'Method', 'SellerG', 'Date',\n",
      "       'Distance', 'Postcode', 'Bedroom2', 'Bathroom', 'Landsize', 'Lattitude',\n",
      "       'Longtitude', 'Regionname', 'Propertycount'],\n",
      "      dtype='object')\n"
     ]
    }
   ],
   "source": [
    "X = data.drop('Price',axis=1)\n",
    "print(X)\n",
    "print(X.columns)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 76,
   "id": "fbd974e3",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0        1480000.0\n",
       "1        1035000.0\n",
       "2        1465000.0\n",
       "3         850000.0\n",
       "4        1600000.0\n",
       "           ...    \n",
       "13575    1245000.0\n",
       "13576    1031000.0\n",
       "13577    1170000.0\n",
       "13578    2500000.0\n",
       "13579    1285000.0\n",
       "Name: Price, Length: 13580, dtype: float64"
      ]
     },
     "execution_count": 76,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "y = data.Price\n",
    "y"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 77,
   "id": "018ddd30",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "['h' 'u' 't']\n",
      "['S' 'SP' 'PI' 'VB' 'SA']\n",
      "['Northern Metropolitan' 'Western Metropolitan' 'Southern Metropolitan'\n",
      " 'Eastern Metropolitan' 'South-Eastern Metropolitan' 'Eastern Victoria'\n",
      " 'Northern Victoria' 'Western Victoria']\n",
      "16\n"
     ]
    }
   ],
   "source": [
    "#选出特征中的分类列\n",
    "category_col = [col for col in X.columns if data[col].dtype == 'object' and data[col].nunique()<10]\n",
    "category_col\n",
    "col_sum = 0\n",
    "for col in category_col:\n",
    "    print(data[col].unique())\n",
    "    col_sum = len(data[col].unique()) + col_sum\n",
    "print(col_sum)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 78,
   "id": "5da1e075",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "['Distance',\n",
       " 'Postcode',\n",
       " 'Bedroom2',\n",
       " 'Bathroom',\n",
       " 'Landsize',\n",
       " 'Lattitude',\n",
       " 'Longtitude',\n",
       " 'Propertycount']"
      ]
     },
     "execution_count": 78,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#选出特征中的数字列\n",
    "numerial_col = [col for col in X.columns if data[col].dtype in ['int','float']]\n",
    "numerial_col"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 79,
   "id": "0b580258",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Type</th>\n",
       "      <th>Method</th>\n",
       "      <th>Regionname</th>\n",
       "      <th>Distance</th>\n",
       "      <th>Postcode</th>\n",
       "      <th>Bedroom2</th>\n",
       "      <th>Bathroom</th>\n",
       "      <th>Landsize</th>\n",
       "      <th>Lattitude</th>\n",
       "      <th>Longtitude</th>\n",
       "      <th>Propertycount</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>h</td>\n",
       "      <td>S</td>\n",
       "      <td>Northern Metropolitan</td>\n",
       "      <td>2.5</td>\n",
       "      <td>3067.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>202.0</td>\n",
       "      <td>-37.79960</td>\n",
       "      <td>144.99840</td>\n",
       "      <td>4019.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>h</td>\n",
       "      <td>S</td>\n",
       "      <td>Northern Metropolitan</td>\n",
       "      <td>2.5</td>\n",
       "      <td>3067.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>156.0</td>\n",
       "      <td>-37.80790</td>\n",
       "      <td>144.99340</td>\n",
       "      <td>4019.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>h</td>\n",
       "      <td>SP</td>\n",
       "      <td>Northern Metropolitan</td>\n",
       "      <td>2.5</td>\n",
       "      <td>3067.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>134.0</td>\n",
       "      <td>-37.80930</td>\n",
       "      <td>144.99440</td>\n",
       "      <td>4019.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>h</td>\n",
       "      <td>PI</td>\n",
       "      <td>Northern Metropolitan</td>\n",
       "      <td>2.5</td>\n",
       "      <td>3067.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>94.0</td>\n",
       "      <td>-37.79690</td>\n",
       "      <td>144.99690</td>\n",
       "      <td>4019.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>h</td>\n",
       "      <td>VB</td>\n",
       "      <td>Northern Metropolitan</td>\n",
       "      <td>2.5</td>\n",
       "      <td>3067.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>120.0</td>\n",
       "      <td>-37.80720</td>\n",
       "      <td>144.99410</td>\n",
       "      <td>4019.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13575</th>\n",
       "      <td>h</td>\n",
       "      <td>S</td>\n",
       "      <td>South-Eastern Metropolitan</td>\n",
       "      <td>16.7</td>\n",
       "      <td>3150.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>652.0</td>\n",
       "      <td>-37.90562</td>\n",
       "      <td>145.16761</td>\n",
       "      <td>7392.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13576</th>\n",
       "      <td>h</td>\n",
       "      <td>SP</td>\n",
       "      <td>Western Metropolitan</td>\n",
       "      <td>6.8</td>\n",
       "      <td>3016.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>333.0</td>\n",
       "      <td>-37.85927</td>\n",
       "      <td>144.87904</td>\n",
       "      <td>6380.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13577</th>\n",
       "      <td>h</td>\n",
       "      <td>S</td>\n",
       "      <td>Western Metropolitan</td>\n",
       "      <td>6.8</td>\n",
       "      <td>3016.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>436.0</td>\n",
       "      <td>-37.85274</td>\n",
       "      <td>144.88738</td>\n",
       "      <td>6380.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13578</th>\n",
       "      <td>h</td>\n",
       "      <td>PI</td>\n",
       "      <td>Western Metropolitan</td>\n",
       "      <td>6.8</td>\n",
       "      <td>3016.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>866.0</td>\n",
       "      <td>-37.85908</td>\n",
       "      <td>144.89299</td>\n",
       "      <td>6380.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13579</th>\n",
       "      <td>h</td>\n",
       "      <td>SP</td>\n",
       "      <td>Western Metropolitan</td>\n",
       "      <td>6.3</td>\n",
       "      <td>3013.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>362.0</td>\n",
       "      <td>-37.81188</td>\n",
       "      <td>144.88449</td>\n",
       "      <td>6543.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>13580 rows × 11 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "      Type Method                  Regionname  Distance  Postcode  Bedroom2  \\\n",
       "0        h      S       Northern Metropolitan       2.5    3067.0       2.0   \n",
       "1        h      S       Northern Metropolitan       2.5    3067.0       2.0   \n",
       "2        h     SP       Northern Metropolitan       2.5    3067.0       3.0   \n",
       "3        h     PI       Northern Metropolitan       2.5    3067.0       3.0   \n",
       "4        h     VB       Northern Metropolitan       2.5    3067.0       3.0   \n",
       "...    ...    ...                         ...       ...       ...       ...   \n",
       "13575    h      S  South-Eastern Metropolitan      16.7    3150.0       4.0   \n",
       "13576    h     SP        Western Metropolitan       6.8    3016.0       3.0   \n",
       "13577    h      S        Western Metropolitan       6.8    3016.0       3.0   \n",
       "13578    h     PI        Western Metropolitan       6.8    3016.0       4.0   \n",
       "13579    h     SP        Western Metropolitan       6.3    3013.0       4.0   \n",
       "\n",
       "       Bathroom  Landsize  Lattitude  Longtitude  Propertycount  \n",
       "0           1.0     202.0  -37.79960   144.99840         4019.0  \n",
       "1           1.0     156.0  -37.80790   144.99340         4019.0  \n",
       "2           2.0     134.0  -37.80930   144.99440         4019.0  \n",
       "3           2.0      94.0  -37.79690   144.99690         4019.0  \n",
       "4           1.0     120.0  -37.80720   144.99410         4019.0  \n",
       "...         ...       ...        ...         ...            ...  \n",
       "13575       2.0     652.0  -37.90562   145.16761         7392.0  \n",
       "13576       2.0     333.0  -37.85927   144.87904         6380.0  \n",
       "13577       2.0     436.0  -37.85274   144.88738         6380.0  \n",
       "13578       1.0     866.0  -37.85908   144.89299         6380.0  \n",
       "13579       1.0     362.0  -37.81188   144.88449         6543.0  \n",
       "\n",
       "[13580 rows x 11 columns]"
      ]
     },
     "execution_count": 79,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X = data[category_col + numerial_col]\n",
    "X"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 80,
   "id": "bc7c7772",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Type</th>\n",
       "      <th>Method</th>\n",
       "      <th>Regionname</th>\n",
       "      <th>Distance</th>\n",
       "      <th>Postcode</th>\n",
       "      <th>Bedroom2</th>\n",
       "      <th>Bathroom</th>\n",
       "      <th>Landsize</th>\n",
       "      <th>Lattitude</th>\n",
       "      <th>Longtitude</th>\n",
       "      <th>Propertycount</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>12167</th>\n",
       "      <td>u</td>\n",
       "      <td>S</td>\n",
       "      <td>Southern Metropolitan</td>\n",
       "      <td>5.0</td>\n",
       "      <td>3182.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>-37.85984</td>\n",
       "      <td>144.9867</td>\n",
       "      <td>13240.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6524</th>\n",
       "      <td>h</td>\n",
       "      <td>SA</td>\n",
       "      <td>Western Metropolitan</td>\n",
       "      <td>8.0</td>\n",
       "      <td>3016.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>193.0</td>\n",
       "      <td>-37.85800</td>\n",
       "      <td>144.9005</td>\n",
       "      <td>6380.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8413</th>\n",
       "      <td>h</td>\n",
       "      <td>S</td>\n",
       "      <td>Western Metropolitan</td>\n",
       "      <td>12.6</td>\n",
       "      <td>3020.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>555.0</td>\n",
       "      <td>-37.79880</td>\n",
       "      <td>144.8220</td>\n",
       "      <td>3755.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2919</th>\n",
       "      <td>u</td>\n",
       "      <td>SP</td>\n",
       "      <td>Northern Metropolitan</td>\n",
       "      <td>13.0</td>\n",
       "      <td>3046.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>265.0</td>\n",
       "      <td>-37.70830</td>\n",
       "      <td>144.9158</td>\n",
       "      <td>8870.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6043</th>\n",
       "      <td>h</td>\n",
       "      <td>S</td>\n",
       "      <td>Western Metropolitan</td>\n",
       "      <td>13.3</td>\n",
       "      <td>3020.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>673.0</td>\n",
       "      <td>-37.76230</td>\n",
       "      <td>144.8272</td>\n",
       "      <td>4217.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      Type Method             Regionname  Distance  Postcode  Bedroom2  \\\n",
       "12167    u      S  Southern Metropolitan       5.0    3182.0       1.0   \n",
       "6524     h     SA   Western Metropolitan       8.0    3016.0       2.0   \n",
       "8413     h      S   Western Metropolitan      12.6    3020.0       3.0   \n",
       "2919     u     SP  Northern Metropolitan      13.0    3046.0       3.0   \n",
       "6043     h      S   Western Metropolitan      13.3    3020.0       3.0   \n",
       "\n",
       "       Bathroom  Landsize  Lattitude  Longtitude  Propertycount  \n",
       "12167       1.0       0.0  -37.85984    144.9867        13240.0  \n",
       "6524        2.0     193.0  -37.85800    144.9005         6380.0  \n",
       "8413        1.0     555.0  -37.79880    144.8220         3755.0  \n",
       "2919        1.0     265.0  -37.70830    144.9158         8870.0  \n",
       "6043        1.0     673.0  -37.76230    144.8272         4217.0  "
      ]
     },
     "execution_count": 80,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.model_selection import train_test_split\n",
    "X_train,X_valid,y_train,y_valid = train_test_split(X,y,train_size=0.8,random_state=0)\n",
    "X_train.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 81,
   "id": "b4b48138",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Type             False\n",
       "Method           False\n",
       "Regionname       False\n",
       "Distance         False\n",
       "Postcode         False\n",
       "Bedroom2         False\n",
       "Bathroom         False\n",
       "Landsize         False\n",
       "Lattitude        False\n",
       "Longtitude       False\n",
       "Propertycount    False\n",
       "dtype: bool"
      ]
     },
     "execution_count": 81,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#数字列缺失值填充\n",
    "X_train_plus = X_train.copy()\n",
    "X_valid_plus = X_valid.copy()\n",
    "\n",
    "# for col in numerial_col:\n",
    "X_train.isnull().any() "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 82,
   "id": "dffba9ac",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 分类变量处理\n",
    "from sklearn.preprocessing import OneHotEncoder\n",
    "\n",
    "OH_encoder = OneHotEncoder(handle_unknown='ignore'\n",
    "                          ,sparse=False\n",
    "                          )\n",
    "# print(OH_encoder.fit_transform(X_train[category_col]))\n",
    "OH_col_train = pd.DataFrame(OH_encoder.fit_transform(X_train[category_col]))\n",
    "OH_col_valid = pd.DataFrame(OH_encoder.transform(X_valid[category_col]))\n",
    "\n",
    "\n",
    "# 把列索引补回来\n",
    "OH_col_train.index = X_train.index\n",
    "OH_col_valid.index = X_valid.index\n",
    "OH_col_valid\n",
    "\n",
    "# 删除分类列\n",
    "Num_X_train = X_train.drop(category_col,axis = 1)\n",
    "Num_X_valid = X_valid.drop(category_col,axis=  1)\n",
    "\n",
    "# 把OneHot便把列与数字列合并\n",
    "OH_X_train = pd.concat([Num_X_train,OH_col_train],axis = 1)\n",
    "OH_X_valid = pd.concat([Num_X_valid,OH_col_valid],axis = 1)\n",
    "\n",
    "X_train = OH_X_train.copy()\n",
    "X_valid = OH_X_valid.copy()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 96,
   "id": "bbc3c268",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.8116667181697331\n"
     ]
    }
   ],
   "source": [
    "# 使用随机森林进行建模\n",
    "from sklearn.ensemble import RandomForestRegressor\n",
    "RFR_modle = RandomForestRegressor(random_state=0)\n",
    "RFR_modle.fit(X_train,y_train)\n",
    "pre_y_RFR = RFR_modle.predict(X_valid)\n",
    "pre_y_RFR\n",
    "print(RFR_modle.score(X_valid,y_valid))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 97,
   "id": "bdba6af9",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.8190704622588374\n"
     ]
    }
   ],
   "source": [
    "# 使用XGBoost进行预测\n",
    "from xgboost import XGBRegressor\n",
    "\n",
    "XGB_model = XGBRegressor(n_estimators=1000\n",
    "                         ,learning_rate=0.05\n",
    "                         ,n_jobs=4\n",
    "                        )\n",
    "XGB_model.fit(X_train, y_train\n",
    "             ,early_stopping_rounds=5\n",
    "             ,eval_set=[(X_valid, y_valid)] \n",
    "             ,verbose=False\n",
    "             )\n",
    "XGB_pre_y = XGB_model.predict(X_valid)\n",
    "print(XGB_model.score(X_valid,y_valid))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 113,
   "id": "215446bf",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Figure(720x288)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "Text(0, 0.5, 'XGB_y_pre')"
      ]
     },
     "execution_count": 113,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 720x288 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "fg = plt.gcf()\n",
    "fg.set_figwidth(10)\n",
    "print(fg)\n",
    "plt.subplot(1,2,1)\n",
    "plt.scatter(y_valid,pre_y_RFR)\n",
    "plt.title('RandomForest_predict')\n",
    "plt.xlabel('y_valid')\n",
    "plt.ylabel('RFR_y_pre')\n",
    "plt.subplot(1,2,2)\n",
    "plt.scatter(y_valid,XGB_pre_y)\n",
    "plt.title('XGBoost_predict')\n",
    "plt.xlabel('y_valid')\n",
    "plt.ylabel('XGB_y_pre')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "704b522d",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.8"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
